package claseArreglosMultidimensionales;

import junit.framework.Assert;

import org.junit.Test;


public class PruebaMapaDeHumedad {
	
	
	@Test
	public void testCrearMapa2x2(){
		MapaDeHumedad miMapa = new MapaDeHumedad(2, 2);
		
		miMapa.setValorHumedad(1, 1, 20);
		miMapa.setValorHumedad(1, 2, 10);
		miMapa.setValorHumedad(2, 1, 80);
		
		double humedad = miMapa.getValorHumedad(2, 1);
		
		Assert.assertEquals(80.0, humedad);
		Assert.assertEquals(0.0, miMapa.getValorHumedad(2, 2));
	}
	
	
	@Test
	public void testCalcularHumedadPromedio(){
		int altura = 10;
		int base = 5;
		MapaDeHumedad miMapa = new MapaDeHumedad(altura, base);
		
		double valorHumedad = 10;
		for(int valorAltura = 1; valorAltura <= altura; valorAltura++){
			for(int valorBase = 1; valorBase <= base; valorBase++){
				miMapa.setValorHumedad(valorAltura, valorBase, valorHumedad);
			}
		}
		
		double humedadPromedio = miMapa.CalcularHumedadPromeido();
		
		Assert.assertEquals(valorHumedad, humedadPromedio);
	}
	
	@Test
	public void testGetValorMinimoHumedad(){
		int altura = 10;
		int base = 5;
		MapaDeHumedad miMapa = new MapaDeHumedad(altura, base);
		
		double valorHumedad = 1;
		for(int valorAltura = 1; valorAltura <= altura; valorAltura++){
			for(int valorBase = 1; valorBase <= base; valorBase++){
				miMapa.setValorHumedad(valorAltura, valorBase, valorHumedad);
				valorHumedad = valorHumedad + 1.2;
			}
		}
		
		double valorMinimo = miMapa.obtenerValorMinimoHumedad();
		
		Assert.assertEquals(1.0, valorMinimo);
	}
	
	@Test
	public void testGetValorMaximoHumedad(){
		int altura = 10;
		int base = 5;
		MapaDeHumedad miMapa = new MapaDeHumedad(altura, base);
		
		double valorHumedad = 75;
		for(int valorAltura = 1; valorAltura <= altura; valorAltura++){
			for(int valorBase = 1; valorBase <= base; valorBase++){
				miMapa.setValorHumedad(valorAltura, valorBase, valorHumedad);
				valorHumedad = valorHumedad - 1.2;
			}
		}
		
		double valorMaximo = miMapa.obtenerValorMaximoHumedad();
		
		Assert.assertEquals(75.0, valorMaximo);
	}
	
	@Test
	public void testCalcularHumedadContornoTerreno(){
		MapaDeHumedad miMapa = new MapaDeHumedad(4, 4);
		
		miMapa.setValorHumedad(1, 1, 20);
		miMapa.setValorHumedad(1, 2, 10);
		miMapa.setValorHumedad(1, 3, 30);
		miMapa.setValorHumedad(1, 4, 50);
		miMapa.setValorHumedad(2, 1, 9);
		miMapa.setValorHumedad(2, 2, 80);
		miMapa.setValorHumedad(2, 3, 8);
		miMapa.setValorHumedad(2, 4, 55.9);
		miMapa.setValorHumedad(3, 1, 20);
		miMapa.setValorHumedad(3, 2, 80);
		miMapa.setValorHumedad(3, 3, 87);
		miMapa.setValorHumedad(3, 4, 9);
		miMapa.setValorHumedad(4, 1, 45);
		miMapa.setValorHumedad(4, 2, 5);
		miMapa.setValorHumedad(4, 3, 22);
		miMapa.setValorHumedad(4, 4, 1);
		
		double humedadContorno = miMapa.CalcularHumedadContornoTerreno();
		
		Assert.assertEquals(276.9, humedadContorno);
		
	}
	
	@Test
	public void testCalcularCantidadMuestras(){
		MapaDeHumedad miMapa = new MapaDeHumedad(4, 4);
		
		miMapa.setValorHumedad(1, 1, 20);
		miMapa.setValorHumedad(1, 2, 10);
		miMapa.setValorHumedad(1, 3, 30);
		miMapa.setValorHumedad(1, 4, 50);
		miMapa.setValorHumedad(2, 1, 9);
		miMapa.setValorHumedad(2, 2, 80);
		miMapa.setValorHumedad(2, 3, 8);
		miMapa.setValorHumedad(2, 4, 55.9);
		miMapa.setValorHumedad(3, 1, 20);
		miMapa.setValorHumedad(3, 2, 80);
		miMapa.setValorHumedad(3, 3, 87);
		miMapa.setValorHumedad(3, 4, 9);
		miMapa.setValorHumedad(4, 1, 45);
		miMapa.setValorHumedad(4, 2, 5);
		miMapa.setValorHumedad(4, 3, 22);
		miMapa.setValorHumedad(4, 4, 1);
		
		int cantidadMuestas = miMapa.calcularCantidadMuestras(50,80);
		
		Assert.assertEquals(4, cantidadMuestas);
	}
	
}
